#include<stdio.h>
#include<stdlib.h>

typedef struct LNode {
	int data;
	struct LNode* next;
}LNode,*LinkList;


bool ListInsert(LinkList& L, int i, int e)
{
	if (i < 1)
		return false;
	LNode* p;   //指针p指向当前扫描到的结点
	int j = 0;//当前p指向是的第几个结点
	p = L;//L指向头结点，头结点是第0个结点（不存数据）
	while (p != NULL && j < i - 1)//循环找到第i-1个结点
	{
		p = p->next;
		j++;
	}
	if (p == NULL)//i值不合法
		return false;
        //后插操作
	LNode* s = (LNode*)malloc(sizeof(LNode));
    if(s=NULL)//内存分配失败
    return false;
	s->data = e;
	s->next = p->next;
	p->next = s;//将结点s连接到p之后
	return true;
}
//前插操作：在p结点前插入元素e；
bool InsertPriorNode(LNode *p,int e){
    if(p==NULL)
    return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    if(s=NULL)//内存分配失败
    return false;
    s->next=p->next;
    p->next=s;//新结点s连接到p之后
    s->data=p->data;//将p中的元素复制到s中
    p->data=e;//将p中的元素覆盖为e
    return true;
}
//按位序删除
bool ListDelete(LinkList& L, int i, int& e)//i表示位序，e表示要返回的值
{
	if (i < 1)
		return false;
	LNode* p;
	int j = 0;
	p = L;
	while (p != NULL && j < i - 1)
	{
		p = p->next;
		j++;
	}
	if (p == NULL)
		return false;
	if (p->next == NULL)//第i-1个结点之后已经没有其他结点
		return false;
	LNode* q = p->next;
	e = q->data;
	p->next = q->next;
	free(q);
	return true;
}